package com.itheima.zipstream;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipStreamDemo4 {
    public static void main(String[] args) throws IOException {
        //需求：将文件夹压缩

        //表示要压缩的文件夹
        File src = new File("D:\\aaa");
        //表示要压缩文件夹的父级路径
        File parentFile = src.getParentFile();
        //要压缩的位置
        File dest = new File(parentFile,src.getName()+".zip");
        //将压缩流关联到压缩包
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dest));

        toZip(src,zos, src.getName());

        zos.close();
    }
    //第三个参数表示压缩包中内部的路径
    public static void toZip(File src,ZipOutputStream zos,String name) throws IOException {
        //1.进入要压缩的文件夹
        File[] files = src.listFiles();
        //2.遍历获得每一个文件或文件夹
        for (File file : files) {
            if(file.isFile()){
                //files里的对象是文件
                ZipEntry entry = new ZipEntry(name+"\\"+file.getName());
                zos.putNextEntry(entry);
                FileInputStream fis = new FileInputStream(file);
                int b;
                while ((b=fis.read())!=-1){
                    zos.write(b);
                }
                fis.close();
                zos.closeEntry();
            }else{
                //files里的对象不是文件
                toZip(file,zos,name+"\\"+file.getName());
            }
        }


    }
}
